home *** CD-ROM | disk | FTP | other *** search
- /*
- * MeinMenu.c
- *
- * S'occupe de grer le menu ppal
- *
- * 20.11.94: Created
- */
-
- #include "!OPTIONS.H" /* Options de compilation */
- #define THIS_FILE "MAINMENU.C v1.00 - 03.95"
-
- /*
- * System headers:
- */
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h> /* header librairie de fnct std */
- #include <aes.h>
- #include <tos.h> /* Malloc pour KERMAP */
- #include <ctype.h>
- #include <ext.h>
-
- /*
- * Custom headers:
- */
- #include "SPEC_PU.H"
- #include "STUT_ONE.RSC\STUT_3.H" /* noms des objets ds le ressource */
- #include "WIN_PU.H"
- #include "ARBKEYPU.H"
- #include "DATPG_PU.H"
- #include "MAIN_PU.H"
- #include "DEBUG_PU.H"
- #include "SHORT_PU.H"
- #include "MMENU_PU.H"
- #include "OBJCT_PU.H"
- #include "SERV_PU.H"
- #include "TEXT_PU.H"
-
- /*
- * Variables internes publiques:
- */
- OBJECT * G_menu_adr; /* Ptr sur le MENU ! */
-
- /*
- * External prototypes:
- */
- extern void renommer_selection(
- GRECT * pGRect_start ); /* In: dbut effet graphique d'ouverture */
- extern void new_arbo( int type, const GRECT *start_box );
- /*
- * Bases:
- */
- extern void creer_rubrique( GRECT *start_box );
-
-
- extern void compile_page( GRECT *pGRect_start );
- extern void decompile_page( GRECT *pGRect_start );
-
- extern void affecte_voies( const GRECT *start_box );
-
- extern void initialiser( void );
- extern void sauver_param_inf( void );
- extern void charger_param_inf ( void );
- extern void set_compat( const GRECT *start_box );
- extern void sauver_config_ini( void );
- extern WIPARAMS *ouvre_fenetre( int class, int type,
- DATAGROUP *datagroup, DATADIR *datadir, DATAPAGE *datapage,
- const char *titre );
- extern void put_wi_on_top( WIPARAMS *wi_params_adr );
-
- /*
- * ------------------------- METHODES ------------------------
- */
-
- /*
- * init_MainMenu(-)
- *
- * Purpose:
- * --------
- * Init des prises srie et des botes de configuration
- *
- * Suggest:
- * --------
- * La dtection de support Bconmap doit tre change:
- * Detecter le type de BIOS avant d'appeller Bconmap.
- *
- * History:
- * --------
- * 20.11.94: fplanque: Created
- */
- void init_MainMenu( void )
- {
- if (rsrc_gaddr( R_TREE, MENU, &G_menu_adr) == 0)
- erreur_rsrc();
- Create_KeyMap( G_menu_adr );
- }
-
-
-
- /*
- * selection_menu(-)
- *
- * Purpose:
- * --------
- * Slection d'une option menu
- *
- * History:
- * --------
- * 1993: fplanque: Created
- * aprs: ajout de nouvelles entres
- * 20.11.94: Prend no title et Entry en parametre
- * 22.11.94: teste si entry enabled avant d'appeller traitement
- * 25.03.95: chg ttmnt SYSTEMST
- */
- void selection_menu(
- int menu_title, /* In: Titre de menu slectionn */
- int menu_entry ) /* In: Entre de menu slectionne */
- {
- GRECT menu_box; /* Coord du titre menu slectionn */
-
- /*
- * Vrifie si l'option de menu est actuellement disponible
- * c_a_d non grise
- */
- if( ! objc_TestEnable( G_menu_adr, menu_entry ) )
- { /*
- * Dslection titre, abandon
- */
- menu_tnormal( G_menu_adr, menu_title, 1);
- return;
- }
-
- graf_mouse(BUSYBEE, 0); /* Change curseur souris */
-
- /*
- * Dtermine coordonnes du titre de menu slectionn:
- */
- objc_xywh( G_menu_adr, menu_title, &menu_box );
-
- /*
- * En fonction de l'entre slectionne
- */
- switch( menu_entry )
- {
- case INFOS:
- apropos( &menu_box );
- break;
-
- case OUVRIR:
- ouverture();
- break;
-
- case FERMER:
- /* Ferme fen suprieure */
- ferme_fenetre( G_wi_list_adr, TRUE_1 );
- break;
-
- case SAUVER:
- /* Sauve contenu fen suprieure ds datapage associe */
- sauver_ram( G_wi_list_adr );
- break;
-
- case SAVEAS:
- ping();
- break;
-
- case SAVEDISK:
- sauver();
- break;
-
- case RENAME:
- /*
- * Renommer le fichier slectionn
- */
- renommer_selection( &menu_box );
- break;
-
- case PREMPLAN:
- /*
- * Ramne dernier au 1er plan
- */
- cycle_window();
- break;
-
- case QUITTER:
- /* Demande conf et tout a... */
- if( main_quitter() == TRUE_1 )
- {
- G_fin=1; /* Signale qu'on veut quitter le prg */
- }
- break;
-
- case MENNEWLK:
- /*
- * Crer un nouveau lien dans la fen suprieure:
- */
- new_arbo( 0, &menu_box );
- break;
-
- case MENNEWPG:
- /*
- * Crer une nlle page dans la fen suprieure:
- */
- new_arbo( 1, &menu_box );
- break;
-
- case MENEWRUB:
- /*
- * Crer une nlle rubrique ds fen suprieure:
- */
- creer_rubrique( &menu_box );
- break;
-
- case MENEWTXT:
- /*
- * Crer une nouveau texte ds fen suprieure:
- */
- create_newText( &menu_box );
- break;
-
- case MENCOMPI:
- /*
- * Compile contenu de la fentre suprieure:
- */
- compile_page( &menu_box );
- break;
-
- case MENDECMP:
- /*
- * DCompile page cran slectionne:
- */
- decompile_page( &menu_box );
- break;
-
- case STESTLOC:
- lancer_serv( SMODE_TEST, menu_title ); /* Test du serveur en mode local */
- break;
-
- case SLANCER:
- lancer_serv( SMODE_NORMAL, menu_title ); /* Lancement du serveur en mode normal */
- break;
-
- case SAFFECT:
- affecte_voies( &menu_box ); /* Affectation de voies */
- break;
-
- case MINISERV:
- initialiser(); /* Initialisation du serveur */
- break;
-
- case MLOADINF:
- charger_param_inf(); /* Charger chemins d'accs serveur + fichiers indiqus */
- break;
-
- case MSAVEINF:
- sauver_param_inf(); /* Sauver les chemins d'accs serveur */
- break;
-
- case PARAMETR:
- parametrage( &menu_box );
- break;
-
- case AFFICHAG:
- /*
- * Paramtres d'affichage de la fen suprieure:
- */
- if ( G_wi_list_adr != NULL ) /* S'il y a au - 1 fen ouverte: */
- {
- switch( G_wi_list_adr -> menu_options.affichage )
- {
- case PARAFF_TEXT:
- /*
- * Texte
- */
- params_texte( &menu_box );
- break;
-
- default:
- signale("Pas de params d'affichage pour cette fenetre");
- }
- }
- break;
-
- case MECOMPAT:
- /* Compatibilit: */
- set_compat( &menu_box );
- break;
-
- case MSAVEINI:
- sauver_config_ini(); /* Sauver configuration */
- break;
-
- case VIDE:
- ouvre_fenetre( CLASS_EMPTY, TYP_EMPTY,
- NULL,NULL,NULL,
- " Sans titre " );
- break;
-
- case DEBUG:
- if ( G_debug_window == NULL )
- { /*
- * Si Fentre de dbugging pas encore ouverte:
- */
- ouvre_fenetre( CLASS_TEXT, TYP_DEBUG,
- NULL,NULL,NULL,
- " Debug Information " );
- }
- else
- {
- put_wi_on_top( G_debug_window ); /* Place fen au premier plan */
- }
- break;
-
-
- case SYSTEMST: /* Demande status systme: */
- {
- size_t freemem = (size_t) Malloc( -1 );
- size_t scoreleft = coreleft();
-
- sprintf( G_tmp_buffer, "Freemem=%lu Kb CoreLeft=%lu Kb", freemem, scoreleft );
- add_textinf( G_debug_window, G_tmp_buffer );
- break;
- }
-
- default: /* Si on a pas pu traiter la demande */
- signale("Pas de routines associe");
- }
-
-
- /*
- * Dslection de l'entre de menu slectionne
- */
- menu_tnormal(G_menu_adr, menu_title, 1);
-
- }
-
-
-
-
- /*
- * sauver_ram(-)
- *
- * Purpose:
- * --------
- * 'Sauvegarde' d'une datapage en ram
- *
- * History:
- * --------
- * 19.06.94: fplanque: Created base on sauver()
- * 14.12.94: prend WIPARAMS* en arg
- */
- void sauver_ram(
- WIPARAMS * pWiParams ) /* In: fentre dont il faut sauver le contenu */
- {
- /*
- * On va sauver le contenu de la fentre au 1er plan:
- */
- if( pWiParams == NULL
- || pWiParams -> class != CLASS_DATAPAGE )
- {
- ping();
- return;
- }
-
- /*
- * S'il y a une fentre au premier plan
- */
- switch ( pWiParams -> type ) /* Selon le type de fentre */
- {
- case TYP_TEXT:
- /*
- * Sauve le texte dans la page:
- */
- save_text2datapage( pWiParams -> content_ptr.textInfo,
- pWiParams -> datapage );
- /*
- * Signale que la page a t modifie:
- */
- dataPage_chgSavState( pWiParams -> datapage, SSTATE_MODIFIED, TRUE_1, TRUE_1 );
-
- /*
- * Signale que le contenu de la fentre n'a pas t modifi
- * depuis la dernire sauvegarde:
- */
- Wnd_ClearModified( pWiParams );
- break;
-
- default:
- signale("Ne sait pas sauver le contenu de cette fentre" );
- }
- }
-
-
-
- /*
- * handle_keypress(-)
- *
- * Purpose:
- * --------
- * Traite l'appui sur une touche
- * dans la boucle ppale du prg
- * (Enfin pour l'instant on est limit aux raccourcis claviers)
- *
- * History:
- * --------
- * 20.11.94: fplanque: Created
- * 22.11.94: fplanque: utilisation de KEYTAB (thanks to P. Craponne)
- * 08.01.95: renvoie code de retour
- */
- BOOL handle_keypress( /* Out: TRUE_1 si reconnu */
- int n_kbd_state, /* In: Etat du clavier lors de l'appui de touche */
- int n_ScanCode, /* In: Scancode de la touche presse */
- char c_car ) /* In: Code ascii de la touche */
- {
- int n_MenuTitle;
- int n_MenuEntry;
- KEYTAB * pKeyTab;
-
- /* printf( "\r kbd_state:%X ScanCode:%X car=%d ", n_kbd_state, n_ScanCode, (int)c_car ); */
-
- if( n_kbd_state && (K_CTRL | K_ALT) )
- { /*
- * S'il faut retrouver le code ASCII:
- */
- pKeyTab = Keytbl( (void *) NIL_1, (void *) NIL_1, (void *) NIL_1 );
-
- c_car = toupper( (pKeyTab -> unshift)[ n_ScanCode ] );
- }
-
- /* printf( "ultimately: %d ", (int)c_car ); */
-
- n_MenuEntry = Lookup_Shortkey( n_kbd_state, n_ScanCode, c_car, &n_MenuTitle );
-
- if( n_MenuEntry != NIL_1 )
- { /*
- * Si raccourci clavier reconnu:
- * Slection titre:
- */
- menu_tnormal( G_menu_adr, n_MenuTitle, 0);
-
- /*
- * Traitement associ:
- */
- selection_menu( n_MenuTitle, n_MenuEntry );
-
- return TRUE_1;
- }
-
- return FALSE0;
- }